package com.secxiot.provider.user.service;

import com.secxiot.provider.task.vo.SosDeptFacilityVo;
import com.secxiot.provider.user.dto.DeptDto;
import com.secxiot.provider.user.dto.UserDeptDto;
import com.secxiot.provider.user.entity.DeptUsersDo;
import com.secxiot.provider.user.vo.DeptVo;
import com.secxiot.provider.user.vo.HospitalVo;
import com.secxiot.provider.user.vo.UserSimpleVo;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

public interface DeptService {

    /**
     * 获取用户部门信息
     *
     * @param userId 用户id
     * @return 部门信息
     */
    DeptDto getDeptByUserId(Long userId);


    /**
     * 获取部门信息
     *
     * @param deptId 部门id
     * @return 部门信息
     */
    DeptDto getDeptByDeptId(Long deptId);


    /**
     * 获取该部门下一层级部门
     *
     * @param deptId 部门id
     * @return 部门信息
     */
    List<DeptDto> listSubdeptByDeptId(Long deptId);

    /***
     * 获取患者部门信息
     * @param id 患者id
     * @return
     */
    List<DeptUsersDo> DeptUsersDoById(Long id);

    /**
     * 获取指定范围内的医院列表
     *
     * @param userId
     * @param longitude
     * @param latitude
     * @return
     */
    List<HospitalVo> hospitalListByUser(Long userId, BigDecimal longitude, BigDecimal latitude, String wxAppId);

    /**
     * 获取最近的医院
     *
     * @param longitude 经度
     * @param latitude  纬度
     * @return
     */
    HospitalVo getNearestHospital(BigDecimal longitude, BigDecimal latitude, Long hospitalId);

    /**
     * 医疗机构详情
     *
     * @param id id
     * @return
     */
    HospitalVo getHospitalById(Long id);

    /**
     * 详情
     *
     * @param deptId 部门id
     * @return
     */
    HospitalVo getHospitalByDeptId(Long deptId);

    /**
     * 获取医院详情
     *
     * @param longitude 经度
     * @param latitude  维度
     * @param deptId    部门Id
     * @return
     */
    HospitalVo getHospitalDistanceByDeptId(@Param("longitude") BigDecimal longitude,
                                           @Param("latitude") BigDecimal latitude,
                                           @Param("deptId") Long deptId);

    /**
     * 医疗机构列表
     *
     * @return
     */
    List<HospitalVo> selectHospital();


    /**
     * 获取医院部门得设备
     *
     * @param deptId
     * @param hospitalId
     * @return
     */
    List<SosDeptFacilityVo> SosFacility(Long deptId, Long hospitalId);

    /**
     * 获取子部门管理者
     *
     * @param deptId 部门id
     * @return 子部门管理者集合
     */
    List<UserSimpleVo> listSubManagers(Long deptId);

    /**
     * 获取用户的非直属上级部门，根据deptLevel由小到大排序
     *
     * @param userId 用户id
     * @return 部门列表
     */
    List<UserDeptDto> listSupperDeptByUserId(Long userId);

    List<DeptDto> listToLeafByDeptId(Long deptId);

    /**
     * 获取parentId下的部门列表
     *
     * @param parentId
     * @return
     */
    List<DeptVo> listDeptByParentId(Long parentId);
}
